jetcrab\bytecode\literals/
array.rs1use crate::ast::Node;
2use crate::vm::instructions::Instruction;
3use crate::vm::types::ArraySize;
4
5pub trait ArrayGenerator {
6 fn generate_array_literal(&mut self, node: &Node);
7}
8
9pub trait ArrayCore {
10 fn instructions(&mut self) -> &mut Vec<Instruction>;
11 fn visit_node(&mut self, node: &Node);
12}
13
14impl<T> ArrayGenerator for T
15where
16 T: ArrayCore,
17{
18 fn generate_array_literal(&mut self, node: &Node) {
19 if let Node::ArrayLiteral(lit) = node {
20 for e in lit.elements.iter().flatten() {
21 self.visit_node(e);
22 }
23 self.instructions()
24 .push(Instruction::NewArray(ArraySize::new(lit.elements.len())));
25 }
26 }
27}